package net.sansi.v3correctserver.constenum;

import cn.hutool.core.util.StrUtil;
import net.sansi.v3correctserver.service.camera.Camera;
import net.sansi.v3correctserver.util.RGBUtil;

import java.util.List;

/**
 * Created by Fang
 * create time : 2024/11/7
 * IDE : IntelliJ IDEA
 * <p>
 * 文件名生成器
 */

public class FilenameGenerator {

    /**
     * 获取照片后缀（拍摄的照片后缀）
     * 存储后缀是固定的
     *
     * @param camera 相机
     * @return 返回后缀
     */
    public static String getPhotoSuffix(Camera camera) {
        return camera.getSuffix();
    }


    /**
     * 黑屏背景相片
     *
     * @param areaId 区域id
     * @return 文件名称
     */
    public static String blackPhoto(Camera camera, int areaId, int colorIdx) {
        return StrUtil.format("black_{}_{}.{}", areaId, RGBUtil.colorName(colorIdx), getPhotoSuffix(camera));
    }

    /**
     * 打屏隔点1x1（不隔点）情况下相片
     * 用于计算围栏
     *
     * @param colorIdx 颜色索引 0 红色 1 绿色 2 蓝色
     * @param areaId   区域id
     * @return 文件名称
     */
    public static String fullPhoto(Camera camera, int colorIdx, int areaId) {
        return StrUtil.format("full_{}_{}.{}", areaId, RGBUtil.colorName(colorIdx), getPhotoSuffix(camera));
    }

    /**
     * 分析相片名称
     *
     * @param camera   相机
     * @param params   参数
     * @param colorIdx 颜色索引
     * @param areaId   区域id
     * @return 文件名称
     */
    public static String analysePhoto(Camera camera, Camera.Params params, int colorIdx, int areaId) {
        return StrUtil.format("analyse_{}_{}_{}_{}_{}.{}",
                areaId,
                params.getTv(), params.getAv(), params.getIso(),
                RGBUtil.colorName(colorIdx),
                getPhotoSuffix(camera)
        );
    }

    /**
     * 亮度校正图片
     *
     * @param areaId   区域
     * @param colorIdx 颜色
     * @param ofx      x 偏移
     * @param ofy      y 偏移
     * @param idx      照片序号
     * @return 照片名称
     */
    public static String brightPhoto(Camera camera, int areaId, int colorIdx, int ofx, int ofy,
                                     int idx) {
        String suffix = getPhotoSuffix(camera);
        return StrUtil.format("photo_bright_{}_{}_{}_{}_{}.{}",
                areaId,
                RGBUtil.colorName(colorIdx),
                ofx, ofy, idx, suffix);
    }

    /**
     * 亮度校正结果图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名称
     */
    public static String brightResult(int areaId, int colorIdx) {
        return StrUtil.format("result_bright_{}_{}.mat",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 亮度校正结果预览图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String brightResultPreview(int areaId, int colorIdx) {
        return StrUtil.format("result_bright_preview_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 亮度矫正结果打屏图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String brightResultShow(int areaId, int colorIdx) {
        return StrUtil.format("result_bright_show_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 标准亮度打屏图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String brightResultShowStd(int areaId, int colorIdx) {
        return StrUtil.format("result_bright_show_std_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 亮度校正合并结果
     *
     * @return 文件名
     */
    public static String brightMergeResult(int colorIdx, boolean fixLine) {
        return StrUtil.format("result_bright_merged_{}_{}.mat", RGBUtil.colorName(colorIdx), fixLine);
    }

    /**
     * 亮度校正合并结果打屏图片
     *
     * @param colorIdx 颜色索引
     * @return 地址
     */
    public static String brightMergeShow(int colorIdx, boolean fixLine) {
        return StrUtil.format("result_bright_merged_show_{}_{}.png", RGBUtil.colorName(colorIdx), fixLine);
    }

    /**
     * 亮度校正合并结果
     *
     * @param colorIdx 颜色索引
     * @param areaIds  区域 ids
     * @return 文件名
     */
    public static String brightMergeAreasResult(int colorIdx, List<Integer> areaIds) {
        return StrUtil.format("result_bright_merged_{}_[{}].mat",
                RGBUtil.colorName(colorIdx), StrUtil.join("_", areaIds)
        );
    }

    /**
     * 边框识别结果，用于亮暗线矫正
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String borderResult(int areaId, int colorIdx) {
        return StrUtil.format("result_border_{}_{}.mat",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 亮暗线矫正结果
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String brightLineCorrectResult(int areaId, int colorIdx) {
        return StrUtil.format("result_line_correct_{}_{}.mat",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 色度校正图片
     *
     * @param camera   相机
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @param ofx      x偏移
     * @param ofy      y偏移
     * @return 文件名
     */
    public static String chromaPhoto(Camera camera, int areaId, int colorIdx, int ofx, int ofy) {

        return StrUtil.format("photo_chroma_{}_{}_{}_{}.{}",
                areaId,
                RGBUtil.colorName(colorIdx),
                ofx, ofy, getPhotoSuffix(camera)
        );
    }

    /**
     * 色度校正结果
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String chromaResult(int areaId, int colorIdx) {
        return StrUtil.format("result_chroma_{}_{}.mat",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 色度校正结果预览图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String chromaResultPreview(int areaId, int colorIdx) {
        return StrUtil.format("result_chroma_preview_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 色度矫正结果打屏图片
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String chromaResultShow(int areaId, int colorIdx) {
        return StrUtil.format("result_chroma_show_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 色度矫正标准打屏结果
     *
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String chromaResultShowStd(int areaId, int colorIdx) {
        return StrUtil.format("result_chroma_show_std_{}_{}.png",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * 色度矫正亮暗线矫正结果
     *
     * @param areaId   区域id
     * @param colorIdx 颜色索引
     * @return 文件名
     */
    public static String chromaLineCorrectResult(int areaId, int colorIdx) {
        return StrUtil.format("result_line_correct_{}_{}.mat",
                areaId,
                RGBUtil.colorName(colorIdx)
        );
    }

    /**
     * cl文件
     *
     * @param panelId 面板id
     * @return 文件名
     */
    public static String factorCL(String panelId) {
        return StrUtil.format("{}.cl", panelId);
    }

    /**
     * CL zip 系数文件
     *
     * @return 文件名
     */
    public static String factorCLZip() {
        return "factor_cl.zip";
    }

    /**
     * cf文件
     *
     * @param scanBoardId 扫描板id
     * @return 文件名
     */
    public static String factorCF(String scanBoardId) {
        return StrUtil.format("{}.cf", scanBoardId);
    }

    /**
     * CF zip 系数文件
     *
     * @return 文件名
     */
    public static String factorCFZip() {
        return "factor_cf.zip";
    }


}
